package com.kinyx.framework.business;

import java.util.List;

import javax.util.XArrayList;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import com.kinyx.framework.utils.KArrayUtils;
import com.kinyx.framework.utils.KListUtils;

import lombok.AllArgsConstructor;

@RunWith(Parameterized.class)
@AllArgsConstructor
public class KHexUtils_Tester_hex2ints_0_ints2hex {

	Bean bean;

	@AllArgsConstructor
	static class Bean {
		boolean fillZero;
		boolean toLowerCase;
		String hex;
		List<String> list;
	}

	@Parameters
	public static List<Bean> params() {
		return new XArrayList<Bean>()//
				.xAdd(new Bean(true, false, "0", new XArrayList<String>().xAdd("0")))//
				.xAdd(new Bean(true, false, "9", new XArrayList<String>().xAdd("9")))//
				.xAdd(new Bean(true, false, "a", new XArrayList<String>().xAdd("10")))//
				.xAdd(new Bean(true, false, "f", new XArrayList<String>().xAdd("15")))//
				.xAdd(new Bean(true, true, "A", new XArrayList<String>().xAdd("10")))//
				.xAdd(new Bean(true, true, "F", new XArrayList<String>().xAdd("15")))//

				.xAdd(new Bean(false, false, "00", new XArrayList<String>().xAdd("0")))//
				.xAdd(new Bean(false, false, "09", new XArrayList<String>().xAdd("9")))//
				.xAdd(new Bean(false, false, "0a", new XArrayList<String>().xAdd("10")))//
				.xAdd(new Bean(false, false, "0f", new XArrayList<String>().xAdd("15")))//
				.xAdd(new Bean(false, true, "0A", new XArrayList<String>().xAdd("10")))//
				.xAdd(new Bean(false, true, "0F", new XArrayList<String>().xAdd("15")))//

				.xAdd(new Bean(false, false, "7f", new XArrayList<String>().xAdd("127")))// Byte.MIN_VALUE
				.xAdd(new Bean(false, false, "00", new XArrayList<String>().xAdd("0")))// up
				.xAdd(new Bean(false, false, "ff", new XArrayList<String>().xAdd("255")))// down
				.xAdd(new Bean(false, false, "80", new XArrayList<String>().xAdd("128")))// Byte.MAX_VALUE

				.xAdd(new Bean(false, false, "7f00ff80", new XArrayList<String>().xAdd("127").xAdd("0").xAdd("255").xAdd("128")))//
		;
	}

	@Test
	public void test() {
		Assert.assertEquals(KListUtils.toString(this.bean.list, false), KArrayUtils.toString(KHexUtils.hex2ints(this.bean.hex)));
		final int[] ints = new int[this.bean.list.size()];
		for (int i = 0; i < this.bean.list.size(); i++) {
			ints[i] = Integer.parseInt(this.bean.list.get(i));
		}
		String actual = this.bean.fillZero ? "0" + this.bean.hex : this.bean.hex;
		actual = this.bean.toLowerCase ? actual.toLowerCase() : actual;
		Assert.assertEquals(KHexUtils.ints2hex(ints), actual);
	}

	@Test
	public void t() {
		Assert.assertThrows(IllegalArgumentException.class, () -> KHexUtils.hex2ints("g"));
	}

}
